﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MJM.RPP.EntidadesNegocio;
using MJM.SPP.EntidadesNegocio;
using MJM.Principal;
using MJM.SCA.EntidadesNegocio;

namespace wRegPadron.frmOpciones
{
    public partial class ucMoverModulo2 : System.Web.UI.UserControl
    {
        protected int GetNivel(String path)
        {
            if (path.Contains("/"))
            {
                string[] lst = path.Split('/');
                return lst.Count();
            }
            return 1;
        }

        public void ImprimirArbolCompleto(int modo)
        {
            TreeView tv = new TreeView();
            if (modo == 1)
                tv = tvElementos;
            else
                tv = tvDestino;

            tv.Nodes.Clear();
            List<ModuloEN> lstModulos = new List<ModuloEN>();
            List<SubOpcionEN> lstSubOpcion = new List<SubOpcionEN>();
            List<ControlEN> lstControl = new List<ControlEN>();
            List<ProgramaEN> lstPrograma = new List<ProgramaEN>();
            lstPrograma = MediadorCN.GetPrograma().Listar();

            TreeNode nodo, ni;
            for (int i = 0; i < lstPrograma.Count; i++)
            {
                nodo = new TreeNode();
                nodo.Text = lstPrograma[i].PROMUN_chNOMPRO;
                nodo.Value = lstPrograma[i].PROMUN_inID.ToString();
                //nodo.ShowCheckBox = true;
                tv.Nodes.Add(nodo);
                lstModulos = MediadorCN.GetModulo().Listar(Convert.ToInt32(tv.Nodes[i].Value));
                int n;
                for (int j = 0; j < lstModulos.Count; j++)
                {
                    nodo = new TreeNode();
                    //nodo.ShowCheckBox = true;
                    nodo.Text = lstModulos[j].OPTGEN_chNOMMEN;
                    nodo.Value = Convert.ToString(lstModulos[j].OPTGEN_P_inID);
                    tv.Nodes[i].ChildNodes.Add(nodo);
                    lstSubOpcion = MediadorCN.GetSubOpcion().Listar(lstModulos[j].OPTGEN_P_inID);
                    n = lstSubOpcion.Count;
                    for (int z = 0; z < n; z++)
                    {
                        ni = new TreeNode();
                        ni.Value = lstSubOpcion[z].SUBOPT_P_inID.ToString();
                        ni.Text = lstSubOpcion[z].SUBOPT_chNOMSOP;
                        //ni.ShowCheckBox = true;
                        tv.Nodes[i].ChildNodes[j].ChildNodes.Add(ni);
                        lstControl = MediadorCN.GetControl().Listar(lstSubOpcion[z].SUBOPT_P_inID);
                        for (int h = 0; h < lstControl.Count; h++)
                        {
                            ni = new TreeNode();
                            ni.Value = lstControl[h].OPTCON_P_inID.ToString();
                            ni.Text = lstControl[h].OPTCON_chNOMCON;
                            //ni.ShowCheckBox = true;
                            tv.Nodes[i].ChildNodes[j].ChildNodes[z].ChildNodes.Add(ni);
                        }
                    }
                }
            }
            for (int i = 0; i < tv.Nodes[0].ChildNodes.Count; i++)
            {
                tv.Nodes[0].ChildNodes[i].Collapse();
            }

            tv.DataBind();
            tv.CollapseAll();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SubOpcionEN objSubOpcionEN = MediadorCN.GetSubOpcion().ObtenerTexto("MenuMoverModulos");
                lblTitulo.Text = objSubOpcionEN.SUBOPT_chNOMSOP;
                lblDescripcion.Text = objSubOpcionEN.SUBOPT_chDESSOP;

                List<String> Texto = new List<String>();
                Texto.Add("Módulo");
                Texto.Add("Opción");
                Texto.Add("Control");
                ddlTipoELemento.DataSource = Texto;
                ddlTipoELemento.DataBind();
                ImprimirArbolCompleto(1);
                ImprimirArbolCompleto(2);
                btnGuardar.Visible = false;
                hfIdElemento.Value = "0";
                hfIdDestino.Value = "0";
            }
        }

        protected void tvElementos_SelectedNodeChanged(object sender, EventArgs e)
        {
            int nivel = GetNivel(tvElementos.SelectedNode.ValuePath.ToString());
            if (nivel == ddlTipoELemento.SelectedIndex + 2)
            {
                hfIdElemento.Value = tvElementos.SelectedNode.Value.ToString();
                lblSeleccion.Text = "Usted ha seleccionado: " + tvElementos.SelectedNode.Text;
                lblGuardar.Text = "";
                lblDestino.Text = "";
                lblErrorSeleccion.Text = "";
            }
            else
            {
                lblErrorSeleccion.Text = "Seleccione un " + ddlTipoELemento.SelectedItem.Text;
                lblSeleccion.Text = "";
                lblDestino.Text = "";
            }
        }

        protected void tvDestino_SelectedNodeChanged(object sender, EventArgs e)
        {
            int nivel = GetNivel(tvDestino.SelectedNode.ValuePath.ToString());
            if (nivel == ddlTipoELemento.SelectedIndex + 1)
            {
                if (hfIdElemento.Value != "0")
                {
                    lblGuardar.Text = "";
                    lblDestino.Text = "";
                    lblErrorDestino.Text = "";
                    string dest = "";
                    if (ddlTipoELemento.SelectedIndex == 0)
                        dest = " al programa ";
                    else if (ddlTipoELemento.SelectedIndex == 1)
                        dest = " al módulo ";
                    else if (ddlTipoELemento.SelectedIndex == 2)
                        dest = " a la opción ";
                    hfIdDestino.Value = tvDestino.SelectedNode.Value.ToString();
                    lblDestino.Text = "Usted va ha mover el " + ddlTipoELemento.Text + " " + tvElementos.SelectedNode.Text + dest + tvDestino.SelectedNode.Text;
                    if (hfIdDestino.Value != "0" && hfIdElemento.Value != "0")
                    {
                        btnGuardar.Visible = true;
                        lblGuardar.Text = "";
                    }
                    else
                    {
                        btnGuardar.Visible = false;
                        lblGuardar.Text = "";
                    }
                }
            }
            else
            {
                if (ddlTipoELemento.SelectedIndex > 0)
                    lblErrorDestino.Text = "Seleccione un " + ddlTipoELemento.Items[ddlTipoELemento.SelectedIndex - 1].Text;
                else
                    lblErrorDestino.Text = "Seleccione un programa";
                //lblSeleccion.Text = "";
                lblDestino.Text = "";
            }
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            int result = 0;
            switch (ddlTipoELemento.SelectedIndex)
            {
                case 0:
                    {
                        result = MediadorCN.GetModulo().Mover(Convert.ToInt32(hfIdElemento.Value), Convert.ToInt32(hfIdDestino.Value));
                        MediadorCN.GetPermisoGrupo().Modificar(Convert.ToInt32(hfIdElemento.Value), Convert.ToInt32(hfIdDestino.Value), 1);
                    }; break;
                case 1:
                    {
                        result = MediadorCN.GetSubOpcion().Mover(Convert.ToInt32(hfIdElemento.Value), Convert.ToInt32(hfIdDestino.Value));
                        MediadorCN.GetPermisoGrupo().Modificar(Convert.ToInt32(hfIdElemento.Value), Convert.ToInt32(hfIdDestino.Value), 2);
                    }; break;
                case 2:
                    {
                        result = MediadorCN.GetControl().Mover(Convert.ToInt32(hfIdElemento.Value), Convert.ToInt32(hfIdDestino.Value));
                        MediadorCN.GetPermisoGrupo().Modificar(Convert.ToInt32(hfIdElemento.Value), Convert.ToInt32(hfIdDestino.Value), 3);
                    }; break;
            }

            if (result > 0)
            {
                lblGuardar.Text = "Se han guardado los cambios correctamente";
                hfIdElemento.Value = "0";
                hfIdDestino.Value = "0";
                btnGuardar.Visible = false;
                lblSeleccion.Text = "";
                //lblGuardar.Text = "";
                lblDestino.Text = "";
                ImprimirArbolCompleto(1);
                ImprimirArbolCompleto(2);
            }
        }

    }
}